package com.ruoyi.system.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ChatMessageMapper;
import com.ruoyi.system.domain.ChatMessage;
import com.ruoyi.system.service.IChatMessageService;

/**
 * 聊天消息Service业务层处理
 * 
 * @author ruoyi
 */
@Service
public class ChatMessageServiceImpl implements IChatMessageService 
{
    @Autowired
    private ChatMessageMapper chatMessageMapper;

    /**
     * 查询聊天消息
     * 
     * @param id 聊天消息主键
     * @return 聊天消息
     */
    @Override
    public ChatMessage selectChatMessageById(Long id)
    {
        return chatMessageMapper.selectChatMessageById(id);
    }

    /**
     * 查询聊天消息列表
     * 
     * @param chatMessage 聊天消息
     * @return 聊天消息
     */
    @Override
    public List<ChatMessage> selectChatMessageList(ChatMessage chatMessage)
    {
        return chatMessageMapper.selectChatMessageList(chatMessage);
    }

    /**
     * 查询用户的聊天历史记录
     * 
     * @param userId 用户ID
     * @param serviceId 客服ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @return 聊天消息集合
     */
    @Override
    public List<ChatMessage> selectChatHistory(String userId, String serviceId, int pageNum, int pageSize)
    {
        int startIndex = (pageNum - 1) * pageSize;
        return chatMessageMapper.selectChatHistory(userId, serviceId, startIndex, pageSize);
    }

    /**
     * 查询用户的未读消息数量
     * 
     * @param userId 用户ID
     * @return 未读消息数量
     */
    @Override
    public int selectUnreadCount(String userId)
    {
        return chatMessageMapper.selectUnreadCount(userId);
    }
    
    /**
     * 查询与客服有过聊天记录的用户列表
     * 
     * @param serviceId 客服ID
     * @param nickName 用户昵称（可选，用于搜索）
     * @return 用户列表
     */
    @Override
    public List<Map<String, Object>> selectChatUserList(String serviceId, String nickName)
    {
        return chatMessageMapper.selectChatUserList(serviceId, nickName);
    }

    /**
     * 新增聊天消息
     * 
     * @param chatMessage 聊天消息
     * @return 结果
     */
    @Override
    public int insertChatMessage(ChatMessage chatMessage)
    {
        return chatMessageMapper.insertChatMessage(chatMessage);
    }

    /**
     * 修改聊天消息
     * 
     * @param chatMessage 聊天消息
     * @return 结果
     */
    @Override
    public int updateChatMessage(ChatMessage chatMessage)
    {
        return chatMessageMapper.updateChatMessage(chatMessage);
    }

    /**
     * 批量删除聊天消息
     * 
     * @param ids 需要删除的聊天消息主键
     * @return 结果
     */
    @Override
    public int deleteChatMessageByIds(Long[] ids)
    {
        return chatMessageMapper.deleteChatMessageByIds(ids);
    }

    /**
     * 删除聊天消息信息
     * 
     * @param id 聊天消息主键
     * @return 结果
     */
    @Override
    public int deleteChatMessageById(Long id)
    {
        return chatMessageMapper.deleteChatMessageById(id);
    }

    /**
     * 标记消息为已读
     * 
     * @param messageId 消息ID
     * @return 结果
     */
    @Override
    public int markMessageAsRead(Long messageId)
    {
        ChatMessage chatMessage = new ChatMessage();
        chatMessage.setId(messageId);
        chatMessage.setReadStatus("1");
        chatMessage.setSendStatus("3");
        return chatMessageMapper.updateChatMessage(chatMessage);
    }
    
    /**
     * 标记用户发给客服的所有消息为已读
     * 
     * @param userId 用户ID
     * @param serviceId 客服ID
     * @return 结果
     */
    @Override
    public int markUserMessagesAsRead(String userId, String serviceId)
    {
        return chatMessageMapper.markUserMessagesAsRead(userId, serviceId);
    }

    /**
     * 更新消息发送状态
     * 
     * @param messageId 消息ID
     * @param sendStatus 发送状态
     * @return 结果
     */
    @Override
    public int updateMessageSendStatus(Long messageId, String sendStatus)
    {
        return chatMessageMapper.updateMessageSendStatus(messageId, sendStatus);
    }
} 